import java.util.Vector;

public class 标签符号 {

    String 名称;

    // 代码存储器中的地址
    int 地址;

    // 是否在定义前引用
    boolean 是否为前向引用 = false;

    boolean 是否已定义 = true;

    // 在定义后，我们需要更新内存中的操作数列表
    Vector<Integer> 前向引用 = null;

    public 标签符号(String 名称) {
        this.名称 = 名称;
    }

    public 标签符号(String 名称, int 地址) {
        this.名称 = 名称;
        this.地址 = 地址;
    }

    public 标签符号(String 名称, int 地址, boolean 是否为前向引用) {
        this.名称 = 名称;
        this.是否为前向引用 = 是否为前向引用;

        if (是否为前向引用) {
            添加前向引用(地址); // 如果是前向引用，则暂时不添加地址
        } else {
            this.地址 = 地址;
        }

    }

    public void 添加前向引用(int 地址) {
        if (前向引用 == null) {
            前向引用 = new Vector<>();
        }

        前向引用.add(地址);
    }

    public void 解析前向引用(byte[] 代码) {
        是否为前向引用 = false;

        // 找到对该符号的所有引用
        for (int 索引 : 前向引用) {
            字节码汇编器.写整数(代码, 索引, 地址);
        }
    }

    @Override
    public String toString() {
        String 引用 = "";
        if (前向引用 != null) {
            引用 = "[引用=" + 前向引用 + "]";
        }

        return 名称 + "@" + 地址 + 引用;
    }
}
